package com.ht.api.db;

import javax.sql.DataSource;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;

/**
 * 查询的分页对象
 * @author asq
 * @createTime 2024年12月30日 22:10:53
 */
@Data
@Builder
@AllArgsConstructor
public class DbPage {
	/** 第几页 */
	private Integer pagenum;
	/** 每页条数 */
	private Integer pagesize;
	/** 总记录数 */
	private Long total;
	/** 当前页数据记录 */
	private DbList record;
	
	/**
	 * 构造一个不分页的对象
	 * @param record 数据列表
	 * @return
	 */
	public static DbPage create(DbList record) {
		return DbPage.builder()
		        .record(record)
		        .build();
	}
	
	/**
	 * 构造一个分页对象
	 * @param pagenum 第几页
	 * @param pagesize 每页条数
	 * @param total 总记录数
	 * @param record 当前页数据列表
	 * @return
	 */
	public static DbPage create(Integer pagenum, Integer pagesize, Long total, DbList record) {
		return DbPage.builder()
		        .pagenum(pagenum)
		        .pagesize(pagesize)
		        .total(total)
		        .record(record)
		        .build();
	}
	
	/**
	 * 根据sqlParser构造一个分页对象
	 * @param ds
	 * @param sqlParser
	 * @return
	 */
	public static DbPage create(DataSource ds, SqlParser sqlParser) {
		DbList dbList = sqlParser.query(ds);
		Integer pageNum = sqlParser.getPageNum();
		Integer pageSize = sqlParser.getPageSize();
		
		// 总记录数（有分页时，才查总记录数）
		Long total = null;
		if (pageNum != null) {
			total = sqlParser.count(ds);
		}
		
		// 翻译字典字段
		Mapper.translate(ds, dbList);
		
		// 构造分页对象
		return DbPage.create(pageNum, pageSize, total, dbList);
	}
}
